package com.sun.jdk.date.jdk8after;

import com.sun.org.apache.bcel.internal.generic.LoadClass;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Java8TimeFormatAndParseDemo1 {

    /**
     * SimpleDateFormat类在刚开始的时候讲过了是线程不安全的，所以Java8提供了新的格式化类 DateTimeFormatter
     * <p>
     * dateTimeFormatter类提供了大量预定义格式化器，包括常量（如ISO_LOCAL_DATE），模式字母（如yyyy-MM-dd）以及本地化样式。
     * <p>
     * 与SimpleDateFormat不同的是，新版本的日期/时间API的格式化与解析不需要再创建转换器对象了，通过时间日期对象的parse/format方法可以直接进行转换.
     * <p>
     * LocalDate类定义的parse和format方法
     */
    // 把日期时间对象转换成字符串形式的日期时间
    private static void test1() {
        LocalDateTime now = LocalDateTime.now();

        // 把LocalDateTime转换成字符串格式的日期
        String isoDate = now.format(DateTimeFormatter.ISO_DATE);
        String isoDateTime = now.format(DateTimeFormatter.ISO_DATE_TIME);
        String isoLocalDate = now.format(DateTimeFormatter.ISO_LOCAL_DATE);
        String isoLocalTime = now.format(DateTimeFormatter.ISO_LOCAL_TIME);
        String isoLocalDateTime = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);

        System.out.println("isoDate = " + isoDate);
        System.out.println("isoDateTime = " + isoDateTime);
        System.out.println("isoLocalDate = " + isoLocalDate);
        System.out.println("isoLocalTime = " + isoLocalTime);
        System.out.println("isoLocalDateTime = " + isoLocalDateTime);
    }



    // 把字符串形式的日期时间转换成对象表示的日期时间
    private static void test2() {

        LocalDateTime now = LocalDateTime.now();
        String isoLocalDateTimeStr = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);

        System.out.println("isoLocalDateTimeStr = " + isoLocalDateTimeStr);
        // 在使用parse方法时，理想的情况是要转换的字符串复合 默认的日期时间规则，所以可以直接转换
        LocalDateTime parseLocalDateTimeFromStrDate = LocalDateTime.parse(isoLocalDateTimeStr);
        System.out.println("parseLocalDateTimeFromStrDate = " + parseLocalDateTimeFromStrDate);

        // 但现实情况往往是字符串格式的日期时间是前端传递给后端的，不符合默认的日期时间规则，那该怎么办呢？
        // 字符串类型的时间
        String strDate = "2022-07-24 13:59:24";
        // 针对特定字符串类型的时间的格式器
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime parseDate = LocalDateTime.parse(strDate, dateTimeFormatter);
        System.out.println("parseDate = " + parseDate);

        String format = dateTimeFormatter.format(LocalDateTime.now());
        System.out.println("format = " + format);

    }

    public static void main(String[] args) {
        test1();

        System.out.println("-------");
        test2();
    }
}
